#ifndef SAMOLOT_H
#define SAMOLOT_H

//#include <boost/thread/thread.hpp>
#include <iostream>
#include <string>
#include "SamolotMessage.h"
#include <vector>
#include "pair.h"
#include <vector>
#include "WiezeInfo.h"
#define COUT_SAM(x) 	std::cout<<x;

static volatile bool isRunning;

static	position currPos;
static	position srcPos;
static	position dstPos;
static float v;
static const double pi = 3.14159265358;
static int prevTimeMeas; //kiedy bylo liczone polozenie
static	int timeScale; //do przyspieszania czasu
static int idAktWiezy;//id wiezy w strefie wplywow, w ktorej jestesmy
static	std::string dstLotnisko;
static	std::string  port,srcLotnisko;
static int idLotniskaDst;
static int idLotniskaSrc;
static int liczbaLotnisk;
static int liczbaPobranychLotnisk;
static bool gotowyDoStartu;
static int czasOczekiwania = 3;
static float fajnaOdlegloscOdLotniska = 20;
static bool naZiemiJest;
static float lvlPaliwa;
static float zuzyciePaliwa;
static std::vector<SamolotMessage> awarie;
static std::vector<WiezaInfo> lotniska;
static std::string typSamolotu;

class Samolot
{
private:
	void recountPos();

	int getTimeInSec();
	position calcNewPos(position a, position b, float v, int deltaTime);
	Samolot(){};

public:
	const static int AWARIA_SILNIKA=1;
	const static int AWARIA_PALIWA=2;	
	static Samolot getInstance()
	{		static Samolot instance;
		return instance;
	
	}	

	void setZamiastKonstruktora( int idLoniskaSrc, int idLotniskaDst, std::string typ);

	void init();//inisjuje watki
	void startListening();
	void* startRecounting(void*);
	void sendPos();
	void* startSending(void*);
	void makeDealWithEvent();
	void pickMessage(SamolotMessage msg);
	WiezaInfo znajdzNajblizszeLotnisko(int idZlejWiezy = -1);
	float obliczOdleglosc(position a,position b);
	void powiadomOZmianieWiezy();
	void powiadomOOpuszczeniuStrefy();
	void wyslijGotowoscDoStartu();
	void rozpatrzAwarie(int typ,int  moc,std::string nazwaAwarii);
	void wyslijInfoOZakonczeniuSmigania(std::string);
	void poprosOPozwolenieNaLadowanie();
	void usunAwarie(SamolotMessage msg);
	void powiadomLotniskoOPojawieniuSie();
	void usunSkutki(int typ,int moc);
};


#endif
